
/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package com.brain.cont.view.mbean;

import com.brain.cont.dto.AsientoDetaDto;
import com.brain.cont.dto.PlanContableDetaDto;
import com.brain.cont.dto.PlanContableDto;
import com.brain.cont.manager.PlanContableDetaManager;
import com.brain.cont.manager.PlanContableManager;
import com.brain.cont.view.util.ConstantesCont;
import com.brain.core.exception.DAOException;
import com.brain.core.manager.BitacoraManager;
import com.brain.core.manager.ParametroManager;
import com.brain.core.view.mbean.*;
import com.brain.core.manager.RecursosManager;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
import java.util.logging.Level;

import javax.annotation.Resource;
import javax.faces.model.SelectItem;
import org.apache.log4j.Logger;
import org.primefaces.context.RequestContext;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Controller;

/**
 *
 * @author J. Verde
 */
@Controller("planContableDetaMBean")
@Scope("session")
public class PlanContableDetaMBean extends GenericMBean implements Serializable {

    private static Logger logger = Logger.getLogger(PlanContableDetaMBean.class);
    @Resource
    private RecursosManager recursosManager;
    
    @Resource
    private PlanContableDetaManager manager;
    
    @Resource
    private PlanContableManager planContableManager;
    
    
    
    @Resource
    private BitacoraManager managerBitacora;
    
    @Resource
    private ParametroManager managerParametro;
   
    
    private List<PlanContableDetaDto> lista;
    private PlanContableDetaDto dto;
    private AsientoDetaDto detaDto;
    private PlanContableDetaDto dtoFiltro;
    private String keyTitulo = "key.entidad.plan.contable.deta";
    
   
    private SelectItem[] siTipos;
    private SelectItem[] siTiposFiltro;
    
    private SelectItem[] siClases;
    private SelectItem[] siClasesFiltro;
    
    private SelectItem[] siEstructuras;
    private SelectItem[] siEstructurasFiltro;
    
    private List<PlanContableDetaDto> listaCuentas;
    
    private List<PlanContableDetaDto> listaCuentasPadres;
    
    private List<PlanContableDto> listaPlanesContables;
    
    private List<PlanContableDetaDto> listaCuentasDB;
    
    
    private PlanContableDetaDto padreDto;
    
//    
    @Autowired
    private ApplicationMBean applicationMBean;
    @Autowired
    private SessionMBean sessionMBean;

    public PlanContableDetaMBean() {
        this.dtoFiltro = null;
        this.dto = null;
    }

    public String iniciar() {
        this.dtoFiltro = new PlanContableDetaDto();        
        this.dtoFiltro.setPlanContableDto(sessionMBean.getEmpresaDto().getPlanContableDto());
        this.dtoFiltro.setClase(Long.valueOf(-1));
        this.dtoFiltro.setTipo("-1");
        this.dtoFiltro.setEstructura("-1");        
        this.lista = new ArrayList<PlanContableDetaDto>();
        
        cambiarPlanContable();
        //Cargamos todas las cuentas en la base de datos
        
        
        
        return manager.getUrlLista();
    }
    
    public void cambiarPlanContable(){
        setListaCuentasDB(getListaCuentasDB());
    }

    public void handleTerceroChange() {
        RequestContext context = RequestContext.getCurrentInstance();
        boolean resultado = true;
        context.addCallbackParam("CallbackParam", resultado);
    }
    public String nuevo() {
        sessionMBean.setAccion(ConstantesCont.Formulario.NUEVO);
        sessionMBean.setTitulo(recursosManager.construirTitulo(keyTitulo, sessionMBean.getAccion()));
        
        this.dto = new PlanContableDetaDto();     
        this.dto.setPlanContableDto(this.dtoFiltro.getPlanContableDto());
        this.padreDto = new PlanContableDetaDto();        
        /*this.dto.setAmarre1CtaD(new PlanContableDetaDto());
        this.dto.setAmarre1CtaH(new PlanContableDetaDto());
        this.dto.setAmarre2CtaD(new PlanContableDetaDto());
        this.dto.setAmarre2CtaH(new PlanContableDetaDto());
        this.dto.setAmarre3CtaD(new PlanContableDetaDto());
        this.dto.setAmarre3CtaH(new PlanContableDetaDto());*/
        
        return manager.getUrlPrincipal();
    }
    
    public String nuevoIniciado() {
        sessionMBean.setAccion(ConstantesCont.Formulario.NUEVO);
        sessionMBean.setTitulo(recursosManager.construirTitulo(keyTitulo, sessionMBean.getAccion()));
        
        PlanContableDetaDto dNew = new PlanContableDetaDto(this.dto);
        this.padreDto = this.dto;
        
        this.dto = null;
        this.dto = dNew;
        return manager.getUrlPrincipal();
    }

    
    


    public String editar() {
        sessionMBean.setAccion(ConstantesCont.Formulario.EDITAR);
        sessionMBean.setTitulo(recursosManager.construirTitulo(keyTitulo, sessionMBean.getAccion()));
        this.padreDto = this.dto.getCuentaPadreDto();
        return manager.getUrlPrincipal();
    }
    

    public String ver() {
        sessionMBean.setAccion(ConstantesCont.Formulario.VER);
        sessionMBean.setTitulo(recursosManager.construirTitulo(keyTitulo, sessionMBean.getAccion()));
        return manager.getUrlPrincipal();
    }

    public void guardar() {
        //System.out.println(this.padreDto);       
        try {
            this.dto.setCuentaPadreDto(manager.obtenerPorId(this.padreDto.getId()));
            if (manager.guardar(dto) != null) {
                this.dto = this.manager.obtenerPorId(this.dto.getId());
                sessionMBean.setAccion(ConstantesCont.Formulario.EDITAR);
            }
        } catch (DAOException ex) {
            recursosManager.showError(ex.getMessage());
        }
    }
    
    public String verBitacora() {
        managerBitacora.cargarBitacoraEntidad(manager.getIdEntidad(), this.dto.getId());
        return null;
    }
    
    public void buscar() {
        try {
            lista = manager.buscar(dtoFiltro);
        } catch (DAOException ex) {
            logger.error(ex);
        }
    }

    public String retroceder() {
        sessionMBean.setAccion(ConstantesCont.Formulario.LISTA);
        sessionMBean().setTitulo(recursosManager.construirTitulo(keyTitulo, sessionMBean().getAccion()));
        return manager.getUrlLista();
    }

    public static Logger getLogger() {
        return logger;
    }

    public static void setLogger(Logger logger) {
        PlanContableDetaMBean.logger = logger;
    }

    public RecursosManager getRecursosManager() {
        return recursosManager;
    }

    public void setRecursosManager(RecursosManager recursosManager) {
        this.recursosManager = recursosManager;
    }

    public PlanContableDetaManager getManager() {
        return manager;
    }

    public void setManager(PlanContableDetaManager manager) {
        this.manager = manager;
    }

    public List<PlanContableDetaDto> getLista() {
        return lista;
    }

    public void setLista(List<PlanContableDetaDto> lista) {
        this.lista = lista;
    }

    public PlanContableDetaDto getDto() {
        return dto;
    }

    public void setDto(PlanContableDetaDto dto) {
        this.dto = dto;
    }

    public PlanContableDetaDto getDtoFiltro() {
        return dtoFiltro;
    }

    public void setDtoFiltro(PlanContableDetaDto dtoFiltro) {
        this.dtoFiltro = dtoFiltro;
    }

    public String getKeyTitulo() {
        return keyTitulo;
    }

    public void setKeyTitulo(String keyTitulo) {
        this.keyTitulo = keyTitulo;
    }

    public ApplicationMBean getApplicationMBean() {
        return applicationMBean;
    }

    public void setApplicationMBean(ApplicationMBean applicationMBean) {
        this.applicationMBean = applicationMBean;
    }

    public SessionMBean getSessionMBean() {
        return sessionMBean;
    }

    public void setSessionMBean(SessionMBean sessionMBean) {
        this.sessionMBean = sessionMBean;
    }

    

    public BitacoraManager getManagerBitacora() {
        return managerBitacora;
    }

    public void setManagerBitacora(BitacoraManager managerBitacora) {
        this.managerBitacora = managerBitacora;
    }

    

    public AsientoDetaDto getDetaDto() {
        return detaDto;
    }

    public void setDetaDto(AsientoDetaDto detaDto) {
        this.detaDto = detaDto;
    }

  
    
    public ParametroManager getManagerParametro() {
        return managerParametro;
    }

    public void setManagerParametro(ParametroManager managerParametro) {
        this.managerParametro = managerParametro;
    }

    

    public void setListaCuentas(List<PlanContableDetaDto> listaCuentas) {
        this.listaCuentas = listaCuentas;
    }

    public SelectItem[] getSiTipos() {
        return manager.siTipos();
    }

    public void setSiTipos(SelectItem[] siTipos) {
        this.siTipos = siTipos;
    }

    public SelectItem[] getSiTiposFiltro() {
        return manager.siTiposFiltro();
    }

    public void setSiTiposFiltro(SelectItem[] siTiposFiltro) {
        this.siTiposFiltro = siTiposFiltro;
    }

    public SelectItem[] getSiClases() {
        return manager.siClases();
    }

    public void setSiClases(SelectItem[] siClases) {
        this.siClases = siClases;
    }

    public SelectItem[] getSiClasesFiltro() {
        return manager.siClasesFiltro();
    }

    public void setSiClasesFiltro(SelectItem[] siClasesFiltro) {
        this.siClasesFiltro = siClasesFiltro;
    }

    public SelectItem[] getSiEstructuras() {
        return manager.siEstructura();
    }

    public void setSiEstructuras(SelectItem[] siEstructuras) {
        this.siEstructuras = siEstructuras;
    }

    public SelectItem[] getSiEstructurasFiltro() {
        return manager.siEstructuraFiltro();
    }

    public void setSiEstructurasFiltro(SelectItem[] siEstructurasFiltro) {
        this.siEstructurasFiltro = siEstructurasFiltro;
    }

    public List<PlanContableDto> getListaPlanesContables() throws DAOException {        
        
        return planContableManager.obtenerPlanesContableEmpresa(sessionMBean.getEmpresaDto().getId());
        
        
    }

    public void setListaPlanesContables(List<PlanContableDto> listaPlanesContables) {
        this.listaPlanesContables = listaPlanesContables;
    }

    public PlanContableManager getPlanContableManager() {
        return planContableManager;
    }

    public void setPlanContableManager(PlanContableManager planContableManager) {
        this.planContableManager = planContableManager;
    }

    public List<PlanContableDetaDto> getListaCuentasPadres() throws DAOException {
        return manager.obtenerListaCuentasPadresMemoria(this.listaCuentasDB,this.dto);
    }

    public void setListaCuentasPadres(List<PlanContableDetaDto> listaCuentasPadres) {
        this.listaCuentasPadres = listaCuentasPadres;
    }

    public List<PlanContableDetaDto> getListaCuentasDB()  {
        PlanContableDetaDto pc = new PlanContableDetaDto();
        pc.setPlanContableDto(this.dtoFiltro.getPlanContableDto());
        try {
            return manager.buscar(pc);
        } catch (DAOException ex) {
            return null;
        }
    }

    public void setListaCuentasDB(List<PlanContableDetaDto> listaCuentasDB) {
        this.listaCuentasDB = listaCuentasDB;
    }

    public PlanContableDetaDto getPadreDto() {
        return padreDto;
    }

    public void setPadreDto(PlanContableDetaDto padreDto) {
        this.padreDto = padreDto;
    }
    
    
}
